home *** CD-ROM | disk | FTP | other *** search
/ Celestin Apprentice 2 / Apprentice-Release2.iso / Tools / Languages / MacMETH 3.2.1 / Coroutines / Thread.DEF < prev    next >
Encoding:
Modula Definition  |  1994-04-20  |  4.7 KB  |  171 lines  |  [TEXT/MEDT]

  1. DEFINITION MODULE Thread;
  2. (*
  3.     File:        Threads.DEF
  4.  
  5.     Contains:    External Interface to Thread Manager 1.2
  6.  
  7.     Copyright:    © 1991-1993 by Apple Computer, Inc., all rights reserved.
  8.     Adapted by: jth 1994
  9.  
  10. *)
  11.  
  12.  
  13. (* Thread Gestalt Selectors *)
  14. CONST
  15.     gestaltThreadMgrAttr        =        'thds';                (* Thread Manager attributes *)
  16.     gestaltThreadMgrPresent     =         0;                    (* bit true if Thread Mgr is present *)
  17.     gestaltSpecificMatchSupport =         1;                    (* bit true if Thread Mgr supports exact match creation option *)
  18.  
  19. (* Thread states *)
  20. TYPE
  21.     ThreadState = INTEGER;
  22.  
  23. CONST
  24.     kReadyThreadState    = 0;
  25.     kStoppedThreadState    = 1;
  26.     kRunningThreadState    = 2;
  27.  
  28. (* Thread environment characteristics *)
  29. TYPE
  30.     ThreadTaskRef (* = Ptr*);
  31.  
  32. (* Thread characteristics *)
  33. TYPE
  34.     ThreadStyle = LONGINT;
  35.  
  36. CONST
  37.     kCooperativeThread    = 1D;
  38.     kPreemptiveThread    = 2D;
  39.  
  40. (* Thread identifiers *)
  41. TYPE
  42.     ThreadID = LONGINT;
  43.  
  44. CONST
  45.     kNoThreadID = 0D;
  46.     kCurrentThreadID = 1D;
  47.     kApplicationThreadID = 2D;
  48.  
  49. (* Options when creating a thread *)
  50. TYPE
  51.     ThreadOptions = LONGINT;
  52.  
  53. CONST
  54.     kNewSuspend = 1D;
  55.     kUsePremadeThread = 2D;
  56.     kCreateIfNeeded = 4D;
  57.     kFPUNotNeeded = 8D;
  58.     kExactMatchThread = 16D;
  59.  
  60. (* Information supplied to the custom scheduler *)
  61. TYPE
  62. SchedulerInfoRecPtr    = POINTER TO SchedulerInfoRec;
  63. SchedulerInfoRec    = RECORD
  64.     InfoRecSize:                LONGINT;
  65.     CurrentThreadID:            ThreadID;
  66.     SuggestedThreadID:            ThreadID;
  67.     InterruptedCoopThreadID:    ThreadID;
  68.     END;
  69.  
  70. (* Routine proc prototypes *)
  71. TYPE
  72.     (* Prototype for a thread's entry routine *)
  73.     ThreadEntryProcPtr = PROCEDURE(LONGINT): LONGINT;
  74.  
  75.     (* Prototype for a custom scheduler *)
  76.     ThreadSchedulerProcPtr = PROCEDURE(SchedulerInfoRec): ThreadID;
  77.  
  78.     (* Prototype for a custom switcher *)
  79.     ThreadSwitchProcPtr = PROCEDURE(ThreadID,  LONGINT);
  80.  
  81.     (* Prototype for a custom termination notification routine*)
  82.     ThreadTerminationProcPtr = PROCEDURE( ThreadID,  LONGINT);
  83.  
  84.     (* Prototypes for debugger new, dispose & schedule thread notification *)
  85.     DebuggerNewThreadProcPtr = PROCEDURE( ThreadID);
  86.     DebuggerDisposeThreadProcPtr = PROCEDURE( ThreadID);   
  87.     DebuggerThreadSchedulerProcPtr = PROCEDURE( SchedulerInfoRec): ThreadID;
  88.  
  89.  
  90. (* Errors *)
  91. CONST
  92.     threadTooManyReqsErr    = -617;
  93.     threadNotFoundErr        = -618;
  94.     threadProtocolErr        = -619;
  95.  
  96. TYPE
  97.     Size = LONGINT;                  (* From Memory.p (MPW) size of a block in bytes *)
  98.     OSErr = INTEGER;                 (* From Types.p (MPW) error code *)
  99.     LongIntPtr = POINTER TO LONGINT; (* From Types.p (MPW) *)
  100.  
  101. (* Thread Manager routines *)
  102. PROCEDURE CreateThreadPool(threadStyle: ThreadStyle; numToCreate: INTEGER; stackSize: Size):OSErr;
  103.     
  104.  
  105. PROCEDURE GetFreeThreadCount(threadStyle: ThreadStyle; VAR freeCount: INTEGER):OSErr;
  106.     
  107.  
  108. PROCEDURE GetSpecificFreeThreadCount ( threadStyle: ThreadStyle; stackSize: Size; VAR freeCount: INTEGER):OSErr;
  109.     
  110.     
  111. PROCEDURE GetDefaultThreadStackSize(threadStyle: ThreadStyle; VAR stackSize: Size):OSErr;
  112.     
  113.  
  114. PROCEDURE ThreadCurrentStackSpace(thread: ThreadID; VAR freeStack: LONGINT):OSErr;
  115.     
  116.  
  117. PROCEDURE NewThread(threadStyle: ThreadStyle; threadEntry: ThreadEntryProcPtr; threadParam: LONGINT; stackSize: Size; options: ThreadOptions; threadResult: LongIntPtr; VAR threadMade: ThreadID):OSErr;
  118.     
  119.  
  120. PROCEDURE DisposeThread(threadToDump: ThreadID; threadResult: LONGINT; recycleThread: BOOLEAN):OSErr;
  121.     
  122.  
  123. PROCEDURE YieldToThread(suggestedThread: ThreadID):OSErr;
  124.     
  125.  
  126. PROCEDURE YieldToAnyThread():OSErr;
  127.     
  128.  
  129. PROCEDURE GetCurrentThread(VAR currentThreadID: ThreadID):OSErr;
  130.     
  131.  
  132. PROCEDURE GetThreadState(threadToGet: ThreadID; VAR threadState: ThreadState):OSErr;
  133.     
  134.  
  135. PROCEDURE SetThreadState(threadToSet: ThreadID; newState: ThreadState; suggestedThread: ThreadID):OSErr;
  136.     
  137.  
  138. PROCEDURE SetThreadStateEndCritical(threadToSet: ThreadID; newState: ThreadState; suggestedThread: ThreadID):OSErr;
  139.     
  140.  
  141. PROCEDURE SetThreadScheduler(threadScheduler: ThreadSchedulerProcPtr):OSErr;
  142.     
  143.  
  144. PROCEDURE SetThreadSwitcher(thread: ThreadID; threadSwitcher: ThreadSwitchProcPtr; switchProcParam: LONGINT; inOrOut: BOOLEAN):OSErr;
  145.     
  146.  
  147. PROCEDURE SetThreadTerminator(thread: ThreadID; threadTerminator: ThreadTerminationProcPtr; terminationProcParam: LONGINT):OSErr;
  148.     
  149.  
  150. PROCEDURE ThreadBeginCritical():OSErr;
  151.     
  152.  
  153. PROCEDURE ThreadEndCritical():OSErr;
  154.     
  155.  
  156. PROCEDURE SetDebuggerNotificationProcs (    notifyNewThread: DebuggerNewThreadProcPtr;
  157.                                         notifyDisposeThread: DebuggerDisposeThreadProcPtr;
  158.                                         notifyThreadScheduler: DebuggerThreadSchedulerProcPtr ):OSErr;
  159.     
  160.  
  161. PROCEDURE GetThreadCurrentTaskRef ( VAR threadTRef: ThreadTaskRef ):OSErr;
  162.     
  163.  
  164. PROCEDURE GetThreadStateGivenTaskRef ( threadTRef: ThreadTaskRef; threadToGet: ThreadID; VAR threadState: ThreadState ):OSErr;
  165.     
  166.  
  167. PROCEDURE SetThreadReadyGivenTaskRef ( threadTRef: ThreadTaskRef; threadToSet: ThreadID ):OSErr;
  168.     
  169. PROCEDURE ThreadsAvailable( ) : BOOLEAN;
  170.  
  171. END Thread.